#include "fingerprint.h"
#include "tfp825r6l.h"
#include "in_out.h"
#include "mqtt.h"
#include "aliyun_model.h"

void FP_Init(void)
{
}

//清除所有注册了的指纹
u8 FP_DelateAllFingerPrint(void)
{
	return TFP_DelateAllFingerPrint();
}

	//注册指纹
u8 FP_RegisterFingerPrint(u16 reg_id)
{

	//@ 控制 LED2 慢闪提醒客户进行指纹注册
	u8 result_buff[128];
	int count = MAX_GETIMG_COUNT;
	u8 is_ok = 0;

	AM_BuildStatuesText("按下手指,进行注册 \r\n",result_buff);
	//@ 添加数据，发布给服务器
	MQTT_PublishQs0(P_TOPIC_NAME, (char *)result_buff, strlen((char *)result_buff));
	printf("指纹注册 \r\n");
	//{while} 循环多次手指
	while(count --)
	{
		is_ok = TFP_ExecCOM(TFTP_GetImg);
		if(is_ok == 0)	break;
	}
	//{if} 获取图像失败处理
	if(count <= 0)
	{
		printf("第1次获取图像失败 \r\n");
		return 1;	
	}
	else	//{else} 获取图像成功处理
	{
		printf("第1次获取图像成功，开始提取特征 \r\n");
	}
	
	is_ok = TFP_SendImg2TzCOM(1);
	if(is_ok != 0)
	{
		printf("第1次特征提取失败 \r\n");
		return 2;
	}
	//@ 控制 LED2 快闪提醒客户松开手指从新录入
	count = MAX_GETIMG_COUNT;
	while(count--)	//{while} 检测手指松开
	{
		AM_BuildStatuesText("请松开手指,重新录入指纹 \r\n",result_buff);
		//@ 添加数据，发布给服务器
		MQTT_PublishQs0(P_TOPIC_NAME, (char *)result_buff, strlen((char *)result_buff));
		
		printf("请松开手指，再次录入指纹 \r\n");
		is_ok = TFP_ExecCOM(TFTP_GetImg);
		if(is_ok != 0) break;
	
	}
	if(count <= 0)
	{
		return 3;
	}
	//@ 检测到已经从新录入了指纹，控制 LED2 切换会慢闪
	count = MAX_GETIMG_COUNT;
	while(count --)
	{
		is_ok = TFP_ExecCOM(TFTP_GetImg);
		if(is_ok == 0)	break;
	}
	//{if} 获取图像失败处理
	if(count == 0)
	{
		printf("第2次获取图像失败 \r\n");
		return 4;
	}
	else	//{else} 获取图像成功处理
	{
		printf("第2次获取图像成功，开始提取特征 \r\n");
	}
	
	is_ok = TFP_SendImg2TzCOM(2);
	if(is_ok != 0)
	{
		printf("第2次特征提取失败 \r\n");
		return 5;
	}
	is_ok = TFP_ExecCOM(TFTP_RegModel);
	if(is_ok != 0)
	{
		printf("特征合并失败 \r\n");
		return 6;
	}
	is_ok = TFP_SendStoreModelCOM(reg_id);
	
	if(is_ok == 0)  printf("保存指纹成功! \r\n");
	else	
	{
		printf("保存指纹出错 \r\n");
		return 7;
	}
	return 0;
}

u8 FP_MatchFingerPrint()
{
	return TFP_ExecCOM(TFTP_AutoIdentify);
}

